/**
 * @file launcher.h
 *
 */
#ifndef LAUNCHER_H
#define LAUNCHER_H

#ifdef __cplusplus
extern "C" {
#endif

/*********************
 *      INCLUDES
 *********************/
#ifdef LV_CONF_INCLUDE_SIMPLE
#include "lvgl.h"
#include "lv_watch_conf.h"
#else
#include "../../../lvgl/lvgl.h"
#include "../../../lv_watch_conf.h"
#endif

#if USE_LV_WATCH_LAUNCHER2 != 0

/*********************
 *      DEFINES
 *********************/
#define WATCH_LAUNCHER_TAB_MAX_COUNT 6
#define LAUNCHER_HOR_SLIDING_LOOP_MODE_ENABLE 1
#define LAUNCHER_LED_ENABLE 1
/**********************
 *      TYPEDEFS
 **********************/
typedef struct
{
    lv_watch_activity_ext_t activity_obj;
    /*New data for this type */
    lv_obj_t * tab_obj[WATCH_LAUNCHER_TAB_MAX_COUNT + 1];
    uint8_t pull_up_start;
} lv_launcher_obj_ext_t;

enum
{
    TAB_APP_INVALID = 0,
    TAB_APP_MUSIC,
    TAB_APP_HEARTRATE,
    TAB_APP_SLEEP,
    TAB_APP_SPORT,
    TAB_APP_PRESSURE,
    TAB_APP_WEATHER,
    TAB_APP_CARD,
    TAB_APP_QRCODE,
    TAB_APP_MAX
};
typedef uint8_t launcher_tab_type_t;

enum
{
    CREATE_APP = 0,
    CREATE_TAB
};
typedef uint8_t launcher_app_create_t;

/**********************
 * GLOBAL PROTOTYPES
 **********************/
lv_obj_t * launcher_activity_create(void);
void sport_create_event_cb(lv_obj_t * btn, lv_event_t e);
lv_obj_t * launcher_tileview_add_tile(lv_obj_t * tileview, uint16_t id);
bool launcher_tileview_act_is_dial(void);
void launcher_recreate(void);
void launcher_tab_init(void);
uint8_t launcher_tab_get_cnt(void);
void launcher_tab_create_all(lv_obj_t * tileview);
void launcher_tab_create_one(lv_obj_t * tileview);
void launcher_power_key_event(void);
uint8_t launcher_tab_get_index(launcher_tab_type_t type);
lv_obj_t * launcher_get_tab(launcher_tab_type_t type);
const char * launcher_tab_get_name(uint8_t type);
char * launcher_tab_get_icon(uint8_t type);
bool launcher_tab_is_added(uint8_t type);
void launcher_tab_destroy(void);
void launcher_quick_function_create(lv_obj_t * par);
lv_obj_t * launcher_get_tileview_obj(void);
void launcher_tab_read(void);
void launcher_tab_save(void);
void launcher_tab_set_type(uint8_t index, uint8_t type);
uint8_t launcher_tab_get_type(uint8_t index);
void launcher_tab_update_stop(void);
void launcher_set_pull_up_signal(lv_obj_t * obj);
/**********************
 *      MACROS
 **********************/

#endif /*USE_LV_WATCH_LAUNCHER2*/

#ifdef __cplusplus
} /* extern "C" */
#endif

#endif /*LAUNCHER_H*/
